// import com.alibaba.druid.sql.ast.SQLExpr;
// import com.alibaba.druid.sql.ast.SQLName;
// import com.alibaba.druid.sql.ast.SQLObject;
// import com.alibaba.druid.sql.ast.SQLStatementImpl;
// import com.alibaba.druid.sql.ast.expr.SQLPropertyExpr;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor;

// import java.util.ArrayList;
// import java.util.List;
#pragma once
#include "../SQLStatementImpl.h"
#include "SQLDDLStatement.h"
#include "SQLAlterStatement.h"

class SQLAlterSequenceStatement : virtual public SQLStatementImpl ,virtual public SQLAlterStatement
{
public:
  SQLName_ptr name;

  BOOL_ptr withCache;
  SQLExpr_ptr startWith;
  SQLExpr_ptr incrementBy;
  SQLExpr_ptr minValue;
  SQLExpr_ptr maxValue;
  BOOL_ptr noMaxValue;
  BOOL_ptr noMinValue;

  BOOL_ptr cycle;
  BOOL_ptr cache;
  SQLExpr_ptr cacheValue;

  BOOL_ptr restart;
  SQLExpr_ptr restartWith;

  BOOL_ptr order;

  BOOL_ptr changeToSimple;
  BOOL_ptr changeToGroup;
  BOOL_ptr changeToTime;

  SQLAlterSequenceStatement();
  SHAREDOBJECT(SQLAlterSequenceStatement);

  // @Override
  void accept0(SQLASTVisitor_ptr visitor);

  // @Override
  SQLObject_list_ptr getChildren();

  SQLName_ptr getName();

  void setName(SQLName_ptr name);

  SQLExpr_ptr getStartWith();

  void setStartWith(SQLExpr_ptr startWith);

  SQLExpr_ptr getIncrementBy();

  void setIncrementBy(SQLExpr_ptr incrementBy);

  SQLExpr_ptr getMaxValue();

  void setMaxValue(SQLExpr_ptr maxValue);

  BOOL_ptr getCycle();

  void setCycle(BOOL_ptr cycle);

  BOOL_ptr getCache();

  void setCache(BOOL_ptr cache);

  BOOL_ptr getWithCache();

  void setWithCache(BOOL_ptr withCache);

  BOOL_ptr getOrder();

  void setOrder(BOOL_ptr order);

  SQLExpr_ptr getMinValue();

  void setMinValue(SQLExpr_ptr minValue);

  BOOL_ptr isNoMaxValue();

  void setNoMaxValue(BOOL_ptr noMaxValue);

  BOOL_ptr isNoMinValue();

  void setNoMinValue(BOOL_ptr noMinValue);

  string_ptr getSchema();

  SQLExpr_ptr getCacheValue();

  void setCacheValue(SQLExpr_ptr cacheValue);

  BOOL_ptr isChangeToSimple();

  void setChangeToSimple(BOOL_ptr changeToSimple);

  BOOL_ptr isChangeToGroup();

  void setChangeToGroup(BOOL_ptr changeToGroup);

  BOOL_ptr isChangeToTime();

  void setChangeToTime(BOOL_ptr changeToTime);

  BOOL_ptr isRestart();

  void setRestart(BOOL_ptr restart);

  SQLExpr_ptr getRestartWith();

  void setRestartWith(SQLExpr_ptr x);

  // @Override
  SQLDDLStatement::DDLObjectType getDDLObjectType();
};
